import re

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from sqlite3_db import Database

app = FastAPI()

# 创建数据库实例
db = Database()

# 添加跨域资源共享中间件，允许跨域请求
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源
    allow_credentials=True,  # 允许凭证
    allow_methods=["*"],  # 允许所有 HTTP 方法
    allow_headers=["*"],  # 允许所有 HTTP 头部
)


# FastAPI 端点
@app.post("/dataset/ragas", response_model=int)
def create_dataset(param: dict):
    # 初始化目标字典
    data = {
        "question": [],
        "groundTruths": [],
        "answer": [],
        "contexts": []
    }

    # 使用正则表达式将两个以上的连续换行符进行分割
    items = re.split(r'\n{2,}', param["data"])

    # 将每个对象转换成字典格式
    for item in items:
        for entry in item.split(',\n'):
            key, value = entry.split(':', 1)
            if key == 'contexts':
                value = [value]
            data[key].append(value)

    # 创建数据集
    db.insert_forms(data)
    return db.cursor.lastrowid


# @app.post("/dataset/chatglm", response_model=int)
# def create_dataset(data: dict):
#     # 创建数据集
#     db.insert_forms(data)
#     return db.cursor.lastrowid


@app.get("/dataset/")
def query_dataset():
    # 查询数据集
    return db.query_dataset()


@app.get("/export-dataset/{pid}")
def export_dataset(pid: str):
    # 导出数据集
    return db.export_dataset(pid)


# 删除数据集
@app.delete("/dataset/{pid}/")
def delete_dataset(pid: int):
    # 删除数据集
    return db.delete_dataset(pid)


if __name__ == "__main__":
    import uvicorn

    # 运行服务器
    uvicorn.run(app, host="0.0.0.0", port=8000)
